//: [Previous](@previous)
/*:
 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段，同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。

 ```
 输入：S = "ababcbacadefegdehijhklij"
 输出：[9,7,8]
 ```

 解释：
 划分结果为 "ababcbaca", "defegde", "hijhklij"。
 每个字母最多出现在一个片段中。
 像 "ababcbacadefegde", "hijhklij" 的划分是错误的，因为划分的片段数较少。

 借助最后位置判断
 */

import Foundation

func partitionLabels(_ s: String) -> [Int] {
    var lastPoint: [Character: Int] = [:]

    var i = 0
    for c in s {
        lastPoint[c] = i
        i += 1
    }
    print(lastPoint)

    var result: [Int] = []
    var start = 0, end = 0
    i = 0
    for c in s {
        let lp = lastPoint[c]!
        end = max(end, lp)
        if i == end {
            result.append(end-start+1)
            start = end+1
        }
        i += 1
    }

    return result
}

print(partitionLabels("a123456"))

//: [Next](@next)
